package com.itheima.web;

import cn.hutool.core.lang.UUID;
import com.alibaba.dubbo.config.annotation.Reference;
import com.itheima.common.MessageConstant;
import com.itheima.common.RedisConstant;
import com.itheima.common.utils.QiniuUtils;
import com.itheima.common.utils.RedisUtils;
import com.itheima.pojo.PageResult;
import com.itheima.pojo.QueryPageBean;
import com.itheima.pojo.Result;
import com.itheima.pojo.Setmeal;
import com.itheima.service.SetmealService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

/**
 * @version V1.0
 * @author: yongjichu
 * @date: 2020/1/14 18:24
 * @description:
 */
@RestController
@RequestMapping("/setmeal")
public class SetmealController {
    @Reference(cluster = "failfast")
    private SetmealService setmealService;
    //因为已经导入了spring-redis.xml文件而且已经让spring知道了这个文件的存在所以剋以直接使用redis中的连接池
    @Autowired
    RedisUtils redisUtils;

    /**
     * 首先先完成将图片上传到七牛云，然后将七牛云返回的图片的名字赋值给前端的imgUrl，然后再拼接七牛云的域名就可以实现图片的回显，再数据库中存储的也就是
     * 图片的名字不可能存全路径，只是回显图片的时候再把七牛云的域名拼接上去完成回显
     */
    @RequestMapping("/upload")
    public Result upload(MultipartFile imgFile){
        try {
            //修改文件名称
            //1.把文件名的后缀名得到
            //2.使用UUID随机生成一个字符串再拼接后缀名，这样做的目的是防止上传的文件名冲突
            //获取上传文件的全名称
            String originalFilename = imgFile.getOriginalFilename();
            //把全名称进行切割得到后缀名
            //1.找到最后一个点的位置
            int lastIndexOf = originalFilename.lastIndexOf(".");
            //调用方法得到后缀名
            String suffix = originalFilename.substring(lastIndexOf);
            //调用UUID生成随机的一个字符串,在拼接后缀名得到新的文件名称
            String newFileName=UUID.randomUUID().toString()+suffix;
            //调用七牛的工具类上传图片到七牛云
            QiniuUtils.upload2Qiniu(imgFile.getBytes(),newFileName);
            /**
             * 在这个位置说明图片已经上传到七牛云，我们从redis的连接池中获取一个连接，将已经上传到七牛云的图片存到集合里
             * redis中存值的方法有sAdd（百度看），给它一个key就是集合的名字，然后再给一个value，这个value就是要村的数据
             */
           /* //1.获取一个连接
            Jedis jedisPoolResource = jedisPool.getResource();
            //2调用添加数据的方法,SETMEAL_PIC_RESOURCES里面存放的是全部的数据
            jedisPoolResource.sadd(RedisConstant.SETMEAL_PIC_RESOURCES,newFileName);
            //3.还回连接
            jedisPoolResource.close();*/
           //将以上三个步骤使用工具类代替
            redisUtils.sadd(RedisConstant.SETMEAL_PIC_RESOURCES,newFileName);
            return Result.success(true, MessageConstant.PIC_UPLOAD_SUCCESS,newFileName);
        } catch (IOException e) {
            e.printStackTrace();
            return Result.success(false,MessageConstant.PIC_UPLOAD_FAIL);
        }
    }

    /**
     * 新增检查套餐
     * @param setmeal
     * @return
     */
    @RequestMapping("/add")
    public Result add(@RequestBody Setmeal setmeal){
        try {
            setmealService.add(setmeal);
            /**
             * 在这个位置说明图片都已经上传到数据库啦，我们从redis连接池中获取一个链接，将已经上传到数据库的图片存放到一个集合中
             * 到时候将这个集合和上面那个集合进行比较，就知道该删除哪些脏数据图片啦
             */
          /*  //1.获取连接
            Jedis jedisPoolResource = jedisPool.getResource();
            //2.调用方法存值
            jedisPoolResource.sadd(RedisConstant.SETMEAL_PIC_DB_RESOURCES,setmeal.getImg());
            //3.关闭连接
            jedisPoolResource.close();*/
          //将以上三个步骤提取出一个工具类
            redisUtils.sadd(RedisConstant.SETMEAL_PIC_DB_RESOURCES,setmeal.getImg());

            return Result.success(true,MessageConstant.ADD_SETMEAL_SUCCESS);
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error(false,MessageConstant.ADD_SETMEAL_FAIL);
        }
    }

    /**
     * 套餐的分页查询
     * @param queryPageBean
     * @return
     */

    @RequestMapping("/queryPage")
    public PageResult queryPage(@RequestBody QueryPageBean queryPageBean){
        try {
            PageResult pageResult=setmealService.queryPage(queryPageBean);
            return new PageResult(pageResult.getTotal(),pageResult.getRows(),"套餐分页成功",true);
        } catch (Exception e) {
            e.printStackTrace();
            return new PageResult("套餐组分页失败",false);
        }

    }

}
